package com.coolw.dynamic.thread.pool.util;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.coolw.common.api.PageResponse;
import org.dromara.hutool.core.bean.BeanUtil;
import org.dromara.hutool.core.collection.CollUtil;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * mybatis plus 工具类
 *
 * @author coolw
 * @date 2024/5/15 16:40
 */
public final class MybatisPlusUtil {

    /**
     * 分页结果数据转换
     *
     * @param pageSource 源数据分页结果
     * @param records    目标数据
     * @param <T>        源数据类型
     * @param <R>        目标数据类型
     * @return 目标数据分页结果
     */
    public static <T, R extends Serializable> PageResponse<R> toPage(Page<T> pageSource, List<R> records) {
        PageResponse<R> pageResponse = new PageResponse<>();
        pageResponse.setPageNum((int) pageSource.getCurrent());
        pageResponse.setPageSize((int) pageSource.getSize());
        pageResponse.setTotalPage((int) pageSource.getPages());
        pageResponse.setTotalSize(pageResponse.getTotalSize());
        pageResponse.setRecords(records);
        return pageResponse;
    }

    /**
     * 分页结果数据转换
     *
     * @param pageSource  源数据分页结果
     * @param targetClass 目标数据class
     * @param <T>         源数据类型
     * @param <R>         目标数据类型
     * @return 目标数据分页结果
     */
    public static <T, R extends Serializable> PageResponse<R> toPage(Page<T> pageSource, Class<R> targetClass) {
        List<R> targetRecords;
        if (CollUtil.isEmpty(pageSource.getRecords())) {
            targetRecords = Collections.emptyList();
        } else {
            targetRecords = BeanUtil.copyToList(pageSource.getRecords(), targetClass);
        }
        return toPage(pageSource, targetRecords);
    }
}
